package com.atguigu1.connection;

import org.junit.Test;

import java.io.InputStream;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.util.Properties;

// 测试获取数据库连接
public class ConnectionTest {

  // 方式五(final版)：将数据库连接需要的4个基本信息声明在配置文件中，通过读取配置文件的方式，获取连接
  /*
   * 此种方式的好处？ 1.实现了数据与代码的分离。实现了解耦 2.如果需要修改配置文件信息，可以避免程序重新打包。
   */
  @Test
  public void getConnection5() throws Exception {
    // 1.读取resources下的配置文件， 如果你写成 new File('xx.xml') 不一定能正确读入
    InputStream is = ConnectionTest.class.getClassLoader().getResourceAsStream("jdbc.properties");
    Properties pros = new Properties();
    // 无语了，idea没给resources文件夹给上资源目录标签，居然null pointer
    pros.load(is);
    String user = pros.getProperty("user");
    String password = pros.getProperty("password");
    String url = pros.getProperty("url");
    String driverClass = pros.getProperty("driverClass");
    // 2.加载驱动
    Class.forName(driverClass);
    /*
     * 在mysql的Driver实现类中，声明了如下的操作：
     * java.sql.DriverManager.registerDriver(new Driver());
     */
    // 3.获取连接
    Connection conn = DriverManager.getConnection(url, user, password);
    System.out.println(conn);
  }

  // 方式一：
  @Test
  public void testConnection1() throws Exception {
    Class<?> clazz = Class.forName("com.mysql.jdbc.Driver");
    Driver driver = (Driver) clazz.newInstance();

    // jdbc:mysql:协议
    // localhost:ip地址
    // 3306：默认mysql的端口号
    // test:test数据库
    String url = "jdbc:mysql://localhost:3306/test";
    // 将用户名和密码封装在Properties中
    Properties info = new Properties();
    info.setProperty("user", "root");
    info.setProperty("password", "12345");
    Connection conn = driver.connect(url, info);
    System.out.println(conn);
  }

  // 方式二：使用DriverManager替换Driver
  @Test
  public void testConnection3() throws Exception {
    Class<?> clazz = Class.forName("com.mysql.jdbc.Driver");
    Driver driver = (Driver) clazz.newInstance();
    DriverManager.registerDriver(driver);
    // Connection conn = DriverManager.getConnection(url, user, password);
  }
}
